
export function startOfTheMonth(date) {
  date.setDate(1) // 将当前时间的日期设置成第一天
  const year = date.getFullYear() // 得到当前年份
  let month = date.getMonth() + 1 // 得到当前月份（0-11月份，+1是当前月份）
  month = month > 10 ? month : '0' + month // 补零
  const day = date.getDate() // 得到当前天数，实际是本月第一天，因为前面setDate(1) 设置过了
  // console.log(month) 03
  return new Date(year + '-' + month + '-' + day) // 这里传入的是字符串
}

export function endOfTheMonth(date) {
  const year = date.getFullYear()
  const month = date.getMonth() + 1
  // 这里传入的是整数时间，返回的是下个月的第一天，因为月份是0-11
  const nextMonthFirthDay = new Date(year, month, 1) // 下个月的第一天
  const oneDay = 1000 * 60 * 60 * 24 // 一天的时间毫秒数
  const endDay = new Date(nextMonthFirthDay - 1000)
  const day = endDay.getDate() // 本月最后一天
  // return endDay
  // 这里传入的是字符串格式的时间，返回的是传入字符串的时间
  return new Date(year + '-' + month + '-' + day)
}

// 格式化日期，如月、日、时、分、秒保证为2位数
function formatNumber(n) {
  n = n.toString()
  return n[1] ? n : '0' + n
}

// 参数number为毫秒时间戳，format为需要转换成的日期格式
export function formatTime(number, format) {
  const time = new Date(number)
  const newArr = []
  const formatArr = ['Y', 'M', 'D', 'h', 'm', 's']
  newArr.push(time.getFullYear())
  newArr.push(formatNumber(time.getMonth() + 1))
  newArr.push(formatNumber(time.getDate()))
  newArr.push(formatNumber(time.getHours()))
  newArr.push(formatNumber(time.getMinutes()))
  newArr.push(formatNumber(time.getSeconds()))
  for (const i in newArr) {
    format = format.replace(formatArr[i], newArr[i])
  }

  return format
}
// 参数date为日期，format为需要转换成的日期格式
export function formatDate(date, format) {
  const time = date
  const newArr = []
  const formatArr = ['Y', 'M', 'D', 'h', 'm', 's']
  newArr.push(time.getFullYear())
  newArr.push(formatNumber(time.getMonth() + 1))
  newArr.push(formatNumber(time.getDate()))
  newArr.push(formatNumber(time.getHours()))
  newArr.push(formatNumber(time.getMinutes()))
  newArr.push(formatNumber(time.getSeconds()))
  for (const i in newArr) {
    format = format.replace(formatArr[i], newArr[i])
  }
  return format
}

// 返回月份日期范围，date为日期
export function dateRangeOfTheMonth(date, format) {
  return [formatDate(startOfTheMonth(date), format), formatDate(endOfTheMonth(date), format)]
}

// 获取今天的日期字符串
export function today(format) {
  return formatDate(new Date(), format)
}

export function data2treeDG(datas, dataArray) {
  for (let j = 0; j < dataArray.length; j++) {
    const dataArrayIndex = dataArray[j]
    const childrenArray = []
    const Id = dataArrayIndex.id
    for (let i = 0; i < datas.length; i++) {
      const data = datas[i]
      // if(data.enabled == true){
      const parentId = data.parentId
      if (parentId === Id) {
        // 判断是否为儿子节点
        const objTemp = {
          id: data.id,
          name: data.name,
          order: data.order,
          parentId: parentId
        }
        childrenArray.push(objTemp)
      }
    }
    dataArrayIndex.children = childrenArray
    if (childrenArray.length > 0) {
      // 有儿子节点则递归
      data2treeDG(datas, childrenArray)
    }
  }
  return dataArray
}

export function getListData(datas) {
  const dataArray = []
  datas.forEach(data => { // if(data.enabled == true) {
    const parentId = data.parentId
    if (parentId === 0) {
      const objTemp = {
        id: data.id,
        name: data.name,
        order: data.order,
        parentId: parentId
      }
      dataArray.push(objTemp)
    }
  })
  this.data2treeDG(this.datas, dataArray)
  this.newdatas = dataArray
}

// 获取本周的第一天
export function getFirstDayOfWeek() {
  const date = new Date()
  const day = date.getDay() // 0-6（0代表星期日）
  const offset = day === 0 ? 6 : day - 1 // 偏移量
  const firstDay = new Date(date.getTime() - offset * 24 * 60 * 60 * 1000) // 得到本周第一天的日期
  return firstDay
}

// 获取本周的最后一天
export function getLastDayOfWeek() {
  const date = new Date()
  const day = date.getDay() // 0-6（0代表星期日）
  const offset = day === 0 ? 0 : 7 - day // 偏移量
  const lastDay = new Date(date.getTime() + offset * 24 * 60 * 60 * 1000) // 得到本周最后一天的日期
  return lastDay
}

// 获取本月的第一天
export function getFirstDayOfMonth() {
  const date = new Date()
  const year = date.getFullYear() // 得到当前年份
  const month = date.getMonth() + 1 // 得到当前月份（0-11月份，+1是当前月份）
  const firstDay = new Date(year + '-' + month + '-01') // 得到本月第一天的日期
  return firstDay
}

// 获取本月的最后一天
export function getLastDayOfMonth() {
  const date = new Date()
  const year = date.getFullYear() // 得到当前年份
  const month = date.getMonth() + 1 // 得到当前月份（0-11月份，+1是当前月份）
  const nextMonthFirthDay = new Date(year, month, 1) // 下个月的第一天
  const oneDay = 1000 * 60 * 60 * 24 // 一天的时间毫秒数
  const endDay = new Date(nextMonthFirthDay - oneDay)
  const day = endDay.getDate() // 本月最后一天
  const lastDay = new Date(year + '-' + month + '-' + day) // 得到本月最后一天的日期
  return lastDay
}

// 获取本季度的第一天
export function getFirstDayOfQuarter() {
  const date = new Date()
  const year = date.getFullYear() // 得到当前年份
  const month = date.getMonth() + 1 // 得到当前月份（0-11月份，+1是当前月份）
  const quarter = Math.floor((month + 2) / 3) // 得到当前季度（1-4季度）
  const firstDay = new Date(year + '-' + (quarter * 3 - 2) + '-01') // 得到本季度第一天的日期
  return firstDay
}

// 获取本季度的最后一天
export function getLastDayOfQuarter() {
  const date = new Date()
  const year = date.getFullYear() // 得到当前年份
  const month = date.getMonth() + 1 // 得到当前月份（0-11月份，+1是当前月份）
  const quarter = Math.floor((month + 2) / 3) // 得到当前季度（1-4季度）
  const nextQuarterFirthDay = new Date(year, (quarter * 3 - 2) + 2, 1) // 下个季度的第一天
  const oneDay = 1000 * 60 * 60 * 24 // 一天的时间毫秒数
  const endDay = new Date(nextQuarterFirthDay - oneDay)
  const day = endDay.getDate() // 本季度最后一天
  const lastDay = new Date(year + '-' + (quarter * 3 - 2) + '-' + day) // 得到本季度最后一天的日期
  return lastDay
}

// 获取本年的第一天
export function getFirstDayOfYear() {
  const date = new Date()
  const year = date.getFullYear() // 得到当前年份
  const firstDay = new Date(year + '-01-01') // 得到本年第一天的日期
  return firstDay
}

// 获取本年的最后一天
export function getLastDayOfYear() {
  const date = new Date()
  const year = date.getFullYear() // 得到当前年份
  const nextYearFirthDay = new Date(year + 1, 0, 1) // 下一年的第一天
  const oneDay = 1000 * 60 * 60 * 24 // 一天的时间毫秒数
  const endDay = new Date(nextYearFirthDay - oneDay)
  const day = endDay.getDate() // 本年最后一天
  const lastDay = new Date(year + '-12-' + day) // 得到本年最后一天的日期
  return lastDay
}

// 获取指定日期的前一天
export function getPrevDay(date) {
  const oneDay = 1000 * 60 * 60 * 24 // 一天的时间毫秒数
  const prevDay = new Date(date.getTime() - oneDay) // 得到前一天的日期
  return prevDay
}

// 获取指定日期的后一天
export function getNextDay(date) {
  const oneDay = 1000 * 60 * 60 * 24 // 一天的时间毫秒数
  const nextDay = new Date(date.getTime() + oneDay) // 得到后一天的日期
  return nextDay
}

// 获取指定日期的前几天
export function getPrevDays(date, days) {
  const oneDay = 1000 * 60 * 60 * 24 // 一天的时间毫秒数
  const prevDays = new Date(date.getTime() - days * oneDay) // 得到前几天的日期
  return prevDays
}

// 获取指定日期的后几天
export function getNextDays(date, days) {
  const oneDay = 1000 * 60 * 60 * 24 // 一天的时间毫秒数
  const nextDays = new Date(date.getTime() + days * oneDay) // 得到后几天的日期
  return nextDays
}
